home *** CD-ROM | disk | FTP | other *** search
/ Utilities Professional 1-1500 / Utilities Professional 1-1500 (1994)(WPD)[!].iso / 00010250 / var0159.dms / var0159.adf / removal.s < prev    next >
Text File  |  1987-01-01  |  6KB  |  340 lines

  1. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2. ;
  3. ;    VirusX Virus Removal Code
  4. ;
  5. ;    (which makes a lot more sense in ASM than as a page full
  6. ;    of bizarre typecasts in C).
  7. ;
  8. ;    All of these routines return 0 if nothing was found,
  9. ;    or Nonzero if a Virus of some sort was found (and removed).
  10. ;
  11. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  12.  
  13.  
  14. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  15. ;
  16. ;    Public Symbols
  17. ;
  18. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  19.  
  20.     XDEF    _BW_Handler        ; Remove Byte Warrior
  21.     XDEF    _LamerHandler        ; Remove the Lamer Exterminator
  22.     XDEF    _Lamer2Handler        ; Remove the Lamer2 Exterminator
  23.     XDEF    _Revenge_Handler    ; Remove the Revenge Virus
  24.     XDEF    _DiskDoktor_Handler    ; Remove guess who.
  25.     XDEF    _CheckRAMForIRQ        ; Check/Remove the IRQ Virus
  26.     XDEF    _MicroSystems_Handler    ; Remove the MS Virus
  27.     XDEF    _VKill_Handler        ; Remove the VKill Virus
  28.  
  29.     XREF    _TD             ; Trackdisk Vector
  30.     
  31. _LVODisable    EQU    -$78
  32. _LVOForbid    EQU    -$84
  33. _LVOEnable    EQU    -$7E
  34. _LVOPermit    EQU    -$8A
  35.  
  36. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  37. ;
  38. ;    BW_Handler
  39. ;
  40. ;    Check a fixed address against 0x444f5301, and just change
  41. ;    some fixed stuff if it's found.
  42. ;
  43. ;    The Byte warrior hangs around via CoolCapture, which is taken
  44. ;    care of back in that C mess.
  45. ;
  46. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  47.  
  48. _BW_Handler
  49.     lea    $7f800,a0
  50.     cmp.l    #$444f5300,(a0)        ; Check $7f800 for DOS\0
  51.     bne.s    NoVirusFound
  52.  
  53.     lea    $7f954,a0
  54.     cmp.w    #$4afc,(a0)        ; And 7f954 for ILLEGAL
  55.     bne.s    NoVirusFound
  56.  
  57.     move.l    $4,a6
  58.     jsr    _LVOForbid(a6)        ; No task switching while we fix
  59.  
  60.     lea    $7f972,a0
  61.     move.w    #$4ef9,(a0)+
  62.     move.w    #$00fc,(a0)+
  63.     move.w    #$06dc,(a0)
  64.  
  65.     move.l    #0,$7f800        ; Clear DOS signature
  66.  
  67.     jsr    _LVOPermit(a6)
  68.     bra    VirusFound
  69.  
  70. NoVirusFound
  71.     clr.l    d0
  72.     rts
  73.  
  74. VirusFound
  75.     moveq    #1,D0
  76.     rts
  77.  
  78.  
  79.  
  80.  
  81. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  82. ;
  83. ;    LamerHandler
  84. ;
  85. ;    Look at an indirect from an offset from the Trackdisk
  86. ;    vector for a signature of ID_DOS_DISK (eeek!), and if so,
  87. ;    clean things up.
  88. ;
  89. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  90.  
  91. HLReg    Reg    A2-A3/A6
  92.  
  93. _LamerHandler
  94.     movem.l    HLReg,-(a7)
  95.     
  96.     move.l    4,a6
  97.  
  98.     move.l    _TD,a0
  99.     sub.w    #$1c,a0
  100.     move.l    (a0),a1
  101.     sub.w    #$17c,a1    ; Now A0 is TDm1C and A1 is it LamerBase
  102.  
  103.     cmp.l    #$444f5300,(a1)
  104.     beq.s    .Got
  105.  
  106.     movem.l    (a7)+,HLReg    ; No got
  107.     bra    NoVirusFound
  108.  
  109. ; Now we know it's there.
  110.     
  111. .Got
  112.     clr.l    d0
  113.     move.l    d0,(a1)        ; Kill Signature
  114.  
  115.     jsr    _LVOForbid(a6)
  116.  
  117.     move.l    a1,a2
  118.     add.w    #$3a8,a2    ; a2 = virus[3a8]
  119.     move.l    a6,a3
  120.     sub.w    #$262,a3
  121.     move.l    (a2),(a3)    ; Change ExecBase vector thing
  122.  
  123.     move.l    a1,a2
  124.     add.w    #$3ac,a2
  125.     move.l    (a2),(a0)
  126.  
  127.     jsr    _LVOPermit(a6)
  128.  
  129.     move.l    #0,$226(a6)    ; Clear KickTagPtr
  130.  
  131.     movem.l    (a7)+,HLReg
  132.  
  133.     bra    VirusFound
  134.  
  135.  
  136. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  137. ;
  138. ;    Lamer2Handler
  139. ;
  140. ;    Look at an indirect from an offset from the Trackdisk
  141. ;    vector for a signature of ID_DOS_DISK (eeek!), and if so,
  142. ;    clean things up.
  143. ;
  144. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  145.  
  146. HL2Reg    Reg    A2-A3/A6
  147.  
  148. _Lamer2Handler
  149.     movem.l    HL2Reg,-(a7)
  150.     
  151.     move.l    4,a6
  152.  
  153.     move.l    _TD,a0
  154.     sub.w    #$1c,a0
  155.     move.l    (a0),a1
  156.     sub.w    #$184,a1    ; Now A0 is TDm1C and A1 is it LamerBase
  157.  
  158.     cmp.l    #$444f5300,(a1)
  159.     beq.s    .Got
  160.  
  161.     movem.l    (a7)+,HL2Reg    ; No got
  162.     bra    NoVirusFound
  163.  
  164. ; Now we know it's there.
  165.     
  166. .Got
  167.     clr.l    d0
  168.     move.l    d0,(a1)        ; Kill Signature
  169.  
  170.     jsr    _LVOForbid(a6)
  171.  
  172.     clr.l    -$262(a6)
  173.  
  174.     move.l    a1,a2
  175.     add.w    #$39c,a2
  176.     move.l    (a2),(a0)
  177.  
  178.     clr.l    $226(a6)    ; Clear KickTagPtr
  179.  
  180.     jsr    _LVOPermit(a6)
  181.  
  182.     movem.l    (a7)+,HL2Reg
  183.  
  184.     bra    VirusFound
  185.  
  186.  
  187. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  188. ;
  189. ;    Revenge_Handler -
  190. ;    
  191. ;    Check for, and remove, the Revenge Virus.
  192. ;
  193. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  194. _Revenge_Handler:
  195.     movem.l    a2/a6,-(a7)
  196.     
  197.     move.l    4,a6
  198.     move.l    a6,a0
  199.     sub.w    #$1c6,a0
  200.     move.l    (a0),d0
  201.     cmp.l    #$100,d0
  202.     blt.s    .Found
  203.     
  204.     movem.l    (a7)+,a2/a6
  205.     bra    NoVirusFound
  206.  
  207. .Found    jsr    _LVODisable(a6)
  208.     
  209.     clr.l    $2e(a6)            ; Kill CoolCapsher
  210.  
  211.     move.l    $D2,A1
  212.     move.l    a1,(a0)        ; Fix DoIO
  213.  
  214.     move.w    #$4e71,$E0
  215.  
  216.     jsr    _LVOEnable(a6)
  217.  
  218.     movem.l    (a7)+,a2/a6
  219.     bra    VirusFound
  220.  
  221. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  222. ;
  223. ;    Remove the Disk Doctor.
  224. ;
  225. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  226. _DiskDoktor_Handler
  227.     move.l    a6,-(a7)
  228.     
  229.     move.l    4,a6
  230.     move.l    -$1c6(a6),a0
  231.  
  232.     cmp.w    #$4eb9,(a0)
  233.     bne.s    .NotFound
  234.  
  235.     cmp.w    #$48e7,6(a0)
  236.     beq.s    .Found
  237.  
  238. .NotFound
  239.     move.l    (a7)+,a6
  240.     bra    NoVirusFound
  241.  
  242. .Found
  243.     jsr    _LVOForbid(a6)
  244.  
  245.     move.l    a6,a0
  246.     sub.w    #$1c6,a0        ; A0 points to DoIO
  247.     
  248.     move.l    (a0),a1
  249.     move.w    #$4e75,$15c(a1)
  250.     
  251.     move.w    #$4e75,$1e2(a1)
  252.  
  253.     move.l    (a0),a1
  254.     move.l    2(a1),(a0)
  255.  
  256.     jsr    _LVOPermit(a6)
  257.     
  258.     move.l    (a7)+,a6
  259.     bra    VirusFound
  260.  
  261.  
  262. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  263. ;
  264. ;    CheckRAMForIRQ - Check RAM for IRQ, return 1 if found
  265. ;      and removed.
  266. ;
  267. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  268. _CheckRAMForIRQ
  269.     move.l    a6,-(a7)        ; Save A6...
  270.     move.l    $4,a6
  271.  
  272.     move.l    a6,a0
  273.     sub.w    #$196,a0        ; OldOpenLibrary
  274.     move.l    (a0),a1
  275.     cmp.l    #$2f3a0010,(a1)
  276.     bne.s    .NotFound
  277.     add.w    #$12,a1
  278.     move.l    (a1),(a0)
  279.     clr.l    $226(a6)        ; Clear KickTagPtr
  280.     clr.l    d0
  281.     bra.s    .go
  282. .NotFound
  283.     clr.l    d0
  284. .go    move.l    (a7)+,a6
  285.     rts
  286.  
  287.  
  288.  
  289. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  290. ;
  291. ;    Find/Remove the Microsystems virus.
  292. ;
  293. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  294. _MicroSystems_Handler
  295.     move.l    a6,-(a7)
  296.     move.l    4,a6
  297.     move.l    a6,a0
  298.     sub.w    #$118,a0
  299.     clr.l    d0
  300.     cmp.l    #$7f520,(a0)
  301.     bne.s    .Done
  302.     lea    $7f536,a1        ; Old AddTask
  303.     move.l    (a1),(a0)
  304.     clr.l    $2e(a6)            ; Kill CoolCapsher
  305.     moveq    #1,d0
  306. .Done    move.l    (a7)+,a6
  307.     rts
  308.  
  309.  
  310. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  311. ;
  312. ;    Find/Remove the VKill virus.
  313. ;
  314. ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  315. _VKill_Handler
  316.     movem.l    a6/a0/a1/d1,-(a7)
  317.     
  318.     clr.l    d0
  319.     
  320.     move.l    4,a6
  321.     movea.l    $3a(a6),a1        ; A1=SysStkLower
  322.     
  323.     cmp.l    #$612643FA,$c(a1)
  324.     bne.s    .Done
  325.     cmp.l    #$00184EAE,$10(a1)
  326.     bne.s    .Done
  327.  
  328.     ;:: Yes, we've found one.
  329.     
  330.     clr.l    $2e(a6)            ; Clear CoolCapture
  331.     
  332.     sub.w    #$16c,a6        ; Now A6 points at PutMsg Vector
  333.  
  334.     move.l    $11e(a1),(a6)        ; Fix PutMsg
  335.  
  336.     moveq    #1,d0            ; Set flag for requester
  337.  
  338. .Done    movem.l    (a7)+,a6/a0/a1/d1
  339.     rts
  340.